package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 通过反射机制调用有参方法
 */
public class ReflectDemo5 {
    public static void main(String[] args) throws Exception {
        //普通方式调用有参方法
        /*
        Person p = new Person();
        p.say("大家好!");
        p.say("大家好!",5);
         */

        //反射方式调用有参方法
        Class cls = Class.forName("reflect.Person"); //1.实例化Class类对象
        Constructor c = cls.getConstructor(String.class);//2.获取有参构造方法
        Object obj = c.newInstance("张三");// 3.通过有参构造方法传参实例化对象

        //say(String)
        Method method = cls.getMethod("say", String.class);//通过Method传参调用say方法
        method.invoke(obj,"大家好!");// boj.say("大家好!");

        //say(String,int)
        method = cls.getMethod("say", String.class,int.class);
        method.invoke(obj,"大家好!",5);// obj.say("大家好!",5); "大家好" 输出五次


    }
}
